001 import javax.swing.*; 002 /** 003 * This is a Swing graphical user interface to the hangman game. 004 * It displays the game board using elementary Swing widgets and 005 * allows the player to control the game via buttons. 006 * Refer to the user interface prototype. 007 */ 008 public class SwingUI extends javax.swing.JFrame implements HangmanUI 009 { 010 011 /** A text area for displaying the guessed letters */ 012 private javax.swing.JTextArea txtBoard; 013 /** The title of the game */ 014 private javax.swing.JLabel lblTitle; 015 /** A panel to contain the row of buttons */ 016 private javax.swing.JPanel buttonPanel; 017 /** A label for the turn counter */ 018 private javax.swing.JLabel lblTurns; 019 020 /** array of buttons for the letters of the alphabet */ 021 private javax.swing.JButton[] LetterButtons; 022 023 /** the reference to the hangman Board */ 024 Board board; 025 026 /** the reference to the parent, the HangmanLogic */ 027 private HangmanLogic parent; 028 029 /** Creates new frame to contain all the user interface components 030 * for the game. 031 */ 032 public SwingUI() 033 { 034 initComponents (); 035 makeButtons(); 036 pack (); 037 } 038 039 /** 040 * Make the interface visible 041 */ 042 public void display() 043 { 044 } 045 046 /** 047 * Save a reference to the instance of the Board 048 * and then show the board. 049 */ 050 public void setBoard(Board theBoard) 051 { 052 } 053 054 /** 055 * Save a reference to the parent (an instance of HangmanLogic) 056 */ 057 public void setParent(HangmanLogic theParent) 058 { 059 } 060 061 062 /** 063 * Display the current state of the board. 064 * Specifically, display the turn counter and 065 * display the board in some formatted manner. 066 */ 067 public void showBoard() 068 { 069 // Show the turn counter 070 // Get the formatted board and show it 071 } 072 073 /** 074 * Display that the player won the game. 075 */ 076 public void showWin() 077 { 078 } 079 080 /** 081 * Display that the player lost the game. 082 * Reveal the solution. 083 */ 084 public void showLose() 085 { 086 } 087 088 /** This method is called from within the constructor to 089 * initialize the form. 090 */ 091 private void initComponents() 092 { 093 // title bar 094 095 // Labels 096 097 // display of the game board 098 099 // Button panel to hold the buttons 100 101 // window listener to handle window closing event 102 addWindowListener(new java.awt.event.WindowAdapter() 103 { 104 public void windowClosing(java.awt.event.WindowEvent evt) 105 { 106 exitForm(evt); 107 } 108 } 109 ); 110 111 } 112 113 /** 114 * Create the 26 letter buttons, one for each letter of 115 * the alphabet. 116 */ 117 private void makeButtons() 118 { 119 // declare an array of 26 buttons 120 121 // for each button 122 // Create a button with its label as the corresponding letter 123 // put the button in the array 124 // set button size and margins 125 // add button listener 126 // add the button to the panel 127 } 128 129 130 /** 131 * Handle a button press by the user. 132 * Determine which letter was chosen. 133 */ 134 private void LetterButtonActionPerformed(java.awt.event.ActionEvent evt) 135 { 136 // Iterate through all buttons until we find the one that 137 // was the source of the button action even. 138 // Disable the button (grey out) 139 // Call processMove, sending it the letter that was chosen. 140 } 141 142 143 /** 144 * Handle end of game, asking if the player wants another game 145 * If yes, start a new game, otherwise exit. 146 */ 147 public void playAgain() 148 { 149 // show confirm dialog, which returns 0 for yes, 1 for no. 150 151 // Call new game routine 152 // Reset (enable) all the letter buttons 153 // if user said no then terminate. 154 } 155 156 /** 157 * Handle window exit: Terminate the application 158 */ 159 private void exitForm(java.awt.event.WindowEvent evt) 160 { 161 } 162 163 }